local ngx = ngx
local pcall = pcall
local pairs = pairs
local assert = assert
local rawget = rawget
local require = require
local string = string
local tonumber = tonumber
local lower = string.lower
local setmetatable = setmetatable

local i18n = {
    -- 语言类型
    LANGUAGE = {
        ZH   = 0,       -- 简体中文
        EN   = 1,       -- 英语
        ZHTW = 2,       -- 繁体中文
        THA  = 3,       -- 泰文
        ESN  = 4,       -- 西班牙
        PTB  = 5,       -- 巴西葡萄牙
        FRA  = 6,       -- 法文
        JPN  = 7,       -- 日文
        ARA  = 8,       -- 阿拉伯文
        KOR  = 9,       -- 韩语
        VIE  = 10,      -- 越南
        RUS  = 11,      -- 俄语
        TUR  = 12,      -- 土耳其
        ITA  = 13,      -- 意大利
        GER  = 14,      -- 德语
        IND  = 15,      -- 印尼语
        MSA  = 16,      -- 马来语

        MAX = 17
    }
}

-- 读取多语言配置
i18n.load_config = function( module )
    local lang_config = {}
    for lang, categroy in pairs(i18n.LANGUAGE) do
        local succ, config = pcall(require, module..lower(lang))
        lang_config[categroy] = succ and config or nil
    end
    return setmetatable({}, {
        __index = function (_, key)
            local lang = tonumber(ngx.ctx.m_params.lang) or i18n.LANGUAGE.ZH
            local conf = rawget(lang_config, lang) or rawget(lang_config, i18n.LANGUAGE.ZH)
            return conf and conf[key] or nil
        end,
        __newindex = function ()
            -- 配置加载完之后应该就是只读的
            assert(false, "do not change readonly config")
        end
    })
end

return i18n
